home *** CD-ROM | disk | FTP | other *** search
/ Game Programming in C++ - Start to Finish / GameProgrammingS.iso / Peon / PeonSDK-Win32-1.0.0.exe / {app} / PeonMain / source / Timer.cpp < prev    next >
C/C++ Source or Header  |  2005-11-09  |  4KB  |  190 lines

  1.  
  2. #include "Timer.h"
  3.  
  4. namespace peon
  5. {
  6.     Timer::Timer()
  7.     {
  8.         m_bUsingQPF         = false;
  9.         m_bTimerStopped     = true;
  10.         m_llQPFTicksPerSec  = 0;
  11.  
  12.         m_llStopTime        = 0;
  13.         m_llLastElapsedTime = 0;
  14.         m_llBaseTime        = 0;
  15.  
  16. #if PEON_PLATFORM == PEON_PLATFORM_WIN32
  17.  
  18.         // Use QueryPerformanceFrequency() to get frequency of timer.  
  19.         LARGE_INTEGER qwTicksPerSec;
  20.         m_bUsingQPF = (bool) (QueryPerformanceFrequency( &qwTicksPerSec ) != 0);
  21.         m_llQPFTicksPerSec = qwTicksPerSec.QuadPart;
  22.  
  23. #endif
  24.  
  25.     }
  26.  
  27.     Timer::~Timer()
  28.     {
  29.     }
  30.  
  31.     void Timer::reset()
  32.     {
  33.         if( !m_bUsingQPF )
  34.             return;
  35.  
  36. #if PEON_PLATFORM == PEON_PLATFORM_WIN32
  37.         // Get either the current time or the stop time
  38.         LARGE_INTEGER qwTime;
  39.         if( m_llStopTime != 0 )
  40.             qwTime.QuadPart = m_llStopTime;
  41.         else
  42.             QueryPerformanceCounter( &qwTime );
  43.  
  44.         m_llBaseTime        = qwTime.QuadPart;
  45.         m_llLastElapsedTime = qwTime.QuadPart;
  46.  
  47. #endif
  48.  
  49.         m_llStopTime        = 0;
  50.         m_bTimerStopped     = FALSE;
  51.     }
  52.  
  53.  
  54.     //--------------------------------------------------------------------------------------
  55.     void Timer::start()
  56.     {
  57.         if( !m_bUsingQPF )
  58.             return;
  59.  
  60. #if PEON_PLATFORM == PEON_PLATFORM_WIN32
  61.         // Get the current time
  62.         LARGE_INTEGER qwTime;
  63.         QueryPerformanceCounter( &qwTime );
  64.  
  65.         if( m_bTimerStopped )
  66.             m_llBaseTime += qwTime.QuadPart - m_llStopTime;
  67.         m_llStopTime = 0;
  68.         m_llLastElapsedTime = qwTime.QuadPart;
  69.         m_bTimerStopped = FALSE;
  70.  
  71. #endif
  72.  
  73.     }
  74.  
  75.  
  76.     //--------------------------------------------------------------------------------------
  77.     void Timer::stop()
  78.     {
  79.         if( !m_bUsingQPF )
  80.             return;
  81.  
  82. #if PEON_PLATFORM == PEON_PLATFORM_WIN32
  83.  
  84.         if( !m_bTimerStopped )
  85.         {
  86.             // Get either the current time or the stop time
  87.             LARGE_INTEGER qwTime;
  88.             if( m_llStopTime != 0 )
  89.                 qwTime.QuadPart = m_llStopTime;
  90.             else
  91.                 QueryPerformanceCounter( &qwTime );
  92.  
  93.             m_llStopTime = qwTime.QuadPart;
  94.             m_llLastElapsedTime = qwTime.QuadPart;
  95.             m_bTimerStopped = TRUE;
  96.         }
  97.  
  98. #endif
  99.  
  100.  
  101.     }
  102.  
  103.  
  104.     //--------------------------------------------------------------------------------------
  105.     void Timer::advance()
  106.     {
  107.         if( !m_bUsingQPF )
  108.             return;
  109.  
  110.         m_llStopTime += m_llQPFTicksPerSec/10;
  111.     }
  112.  
  113.  
  114.     //--------------------------------------------------------------------------------------
  115.     float Timer::getAbsoluteTime()
  116.     {
  117.         if( !m_bUsingQPF )
  118.             return -1.0f;
  119.  
  120. #if PEON_PLATFORM == PEON_PLATFORM_WIN32
  121.         // Get either the current time or the stop time
  122.         LARGE_INTEGER qwTime;
  123.         if( m_llStopTime != 0 )
  124.             qwTime.QuadPart = m_llStopTime;
  125.         else
  126.             QueryPerformanceCounter( &qwTime );
  127.  
  128.         float fTime = qwTime.QuadPart / (float) m_llQPFTicksPerSec;
  129. #endif
  130.  
  131.         return fTime;
  132.     }
  133.  
  134.  
  135.     //--------------------------------------------------------------------------------------
  136.     float Timer::getTime()
  137.     {
  138.         if( !m_bUsingQPF )
  139.             return -1.0f;
  140.  
  141. #if PEON_PLATFORM == PEON_PLATFORM_WIN32
  142.  
  143.         // Get either the current time or the stop time
  144.         LARGE_INTEGER qwTime;
  145.         if( m_llStopTime != 0 )
  146.             qwTime.QuadPart = m_llStopTime;
  147.         else
  148.             QueryPerformanceCounter( &qwTime );
  149.  
  150.         float fAppTime = (float) ( qwTime.QuadPart - m_llBaseTime ) / (float) m_llQPFTicksPerSec;
  151. #endif
  152.  
  153.         return fAppTime;
  154.     }
  155.  
  156.  
  157.     //--------------------------------------------------------------------------------------
  158.     float Timer::getElapsedTime()
  159.     {
  160.         if( !m_bUsingQPF )
  161.             return -1.0f;
  162.  
  163. #if PEON_PLATFORM == PEON_PLATFORM_WIN32
  164.         // Get either the current time or the stop time
  165.         LARGE_INTEGER qwTime;
  166.         if( m_llStopTime != 0 )
  167.             qwTime.QuadPart = m_llStopTime;
  168.         else
  169.             QueryPerformanceCounter( &qwTime );
  170.  
  171.         float fElapsedTime = (float) ( qwTime.QuadPart - m_llLastElapsedTime ) / (float) m_llQPFTicksPerSec;
  172.         m_llLastElapsedTime = qwTime.QuadPart;
  173.  
  174. #endif
  175.  
  176.  
  177.         return fElapsedTime;
  178.     }
  179.  
  180.  
  181.     //--------------------------------------------------------------------------------------
  182.     bool Timer::isStopped()
  183.     {
  184.         return m_bTimerStopped;
  185.     }
  186.  
  187.  
  188.  
  189.  
  190. }